package first.codeTop.alibaba;

/**
 * @ClassName LC19
 * @description:
 * @author: 荣燊
 * @create: 2021-10-18 21:34
 **/
public class LC19 {
    // 删除链表的倒数第 N 个结点
    public static void main(String[] args) {
        ListNode head = new ListNode(1);
        head.next = new ListNode(2);
        head.next.next = new ListNode(3);
        head.next.next.next = new ListNode(4);
        head.next.next.next.next = new ListNode(5);
        ListNode node = removeNthFromEnd(head, 2);
        System.out.println(node.val+"->"+node.next.val+"->"+
                node.next.next.val+"->"+node.next.next.next.val);
    }

    // 双指针
    public static ListNode removeNthFromEnd(ListNode head, int n) {
//        if (head.next == null && n == 1) {
//            return null;
//        }
//        util.ListNode i = head;
//        util.ListNode j = head;
//        while (n > 0) {
//            j = j.next;
//            n--;
//        }
//        //
//        while (j.next != null) {
//            i = i.next;
//            j = j.next;
//        }
//        // 开始删除
//        i.next = i.next.next;
//        return head;

        // 测试用例{[1,2]，2}用以上的写法就不行
        // 为什么要新建临时节点,指向head
        ListNode temp = new ListNode();
        temp.next = head;
        //
        ListNode first = temp;
        ListNode second = head;
        while (n > 0) {
            second = second.next;
            n--;
        }
        //开始
        while (second != null) {
            second = second.next;
            first = first.next;
        }
        //
        first.next = first.next.next;
        return temp.next;
    }
}
